#include <iostream>
#include <cstdio>
#include <string>
#include <vector>
#include <queue>
#include <algorithm>

using namespace std;

struct st
{
    int a,gr,le;
};
st a[1000100],*ap[1000100],*at[1000100];
void merge(int s,int mid,int t)
{
    int ct1,ct2,ti,p1,p2;
    ti=0;
    ct1=mid-s+1;
    ct2=0;
    for(p1=s,p2=mid+1;p1<=mid&&p2<=t;)
    {
        if(ap[p1]->a<ap[p2]->a)
        {
            at[ti++]=ap[p1];
            ap[p1++]->le+=ct2;
            ct1--;
        }
        else
        {
            at[ti++]=ap[p2];
            ap[p2++]->gr+=ct1;
            ct2++;
        }
    }
    while(p2<=t) at[ti++]=ap[p2],ap[p2++]->gr+=ct1;
    while(p1<=mid) at[ti++]=ap[p1],ap[p1++]->le+=ct2;
    for(int i=0;i<ti;i++) ap[s+i]=at[i];
}
void mergeSort(int s,int t)
{
    if(s==t) return;
    int mid=(s+t)>>1;
    mergeSort(s,mid);
    mergeSort(mid+1,t);
    merge(s,mid,t);
}
int main()
{
    int n;
    long long res;
    while(cin>>n)
    {
        res=0;
        for(int i=0;i<n;i++)
        {
            scanf("%d",&a[i].a);
            a[i].gr=a[i].le=0;
            ap[i]=&a[i];
        }
        mergeSort(0,n-1);
        for(int i=0;i<n;i++)
        {
            res+=1LL*a[i].gr*a[i].le;
        }
        cout<<res<<endl;
    }
	return 0;
}
